function foo(x, y) {
  console.log(this.a, x + y);   // 1 5
}

var obj = {
  a: 1
}
let bar = foo.bind(obj, 2)                                                       // 或 bar(2,3)
bar(3)


// let bar = foo.bind(obj, 2, 3)                                                       // 或 bar(2,3)
// bar()
// let bar = foo.bind(obj)                                                       // 或 bar(2,3)
// bar(2, 3)






// foo.call(obj, 2, 3)



// foo.call(obj)   //将 foo函数强行绑定到 obj对象上
// foo.apply(obj)




// let bar = foo.bind(obj)                                     // 或 bar(2,3)
// bar()


// foo.call(obj, 2, 3)      // Object.prototype.call = fun

// foo.apply(obj, [2, 3])